﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using Universidad.Negocio.DomainModel;

namespace Universidad.DataAccess.DataMapper
{
    public class UniversidadContext : DbContext
    {
        public UniversidadContext()
            : base("Name=UniversidadDb")
        {
        }

        public DbSet<Alumno> Alumnos { get; set; }

        public DbSet<InscripcionMateria> InscripcionesMateria { get; set; }

        public DbSet<Materia> Materias { get; set; }

        public DbSet<Nota> Notas { get; set; }

        protected override void OnModelCreating(DbModelBuilder builder)
        {
           builder.Entity<Alumno>().HasMany<InscripcionMateria>(x => x.InscripcionesInternas);

            builder.Entity<InscripcionMateria>()
                    .HasRequired(x => x.Materia)
                    .WithMany()
                    .Map(x => x.MapKey("MateriaId"));
            builder.Entity<InscripcionMateria>()
                    .HasRequired(x => x.Alumno)
                    .WithMany(y => y.InscripcionesInternas)
                    .Map(x => x.MapKey("AlumnoId"));
            builder.Entity<InscripcionMateria>()
                    .HasMany<Nota>(x => x.NotasInternas)
                    .WithOptional()
                    .Map(m => m.MapKey("InscripcionMateriaId"));

            builder.Entity<Nota>()
                .Map<NotaNumerica>(m => m.Requires("Tipo").HasValue("N"))
                .Map<NotaBinaria>(m => m.Requires("Tipo").HasValue("B"));
        }

    }
}
